Virtually all processor-controlled devices include a non-volatile memory device to hold a program called a boot program. The boot program contains the set of instructions executed by the processor on device power-up. In many consumer electronics devices, such as electronic pagers, cellular telephones, personal data organizers, home appliances, etc., the boot program constitutes the complete program for the device. In other more software-intensive devices, such as general purpose computer systems and more sophisticated consumer electronics items, the boot program is usually executed to load other, more extensive programs. In either case, some sort of boot program must be present for the processor-controlled device to function.
Storing the boot program in a non-volatile memory device is referred to as "programming the device" and is typically accomplished with an apparatus called a "device programmer". To program a non-volatile memory device, signal generation circuitry within the device programmer is coupled to the memory device's address, data and control pins. The signal generation circuitry then generates the sequence of address, data and control signals necessary to store a user-supplied boot program in the memory device, often starting at a user-specified address. After the non-volatile memory device has been programmed, it is soldered or socket-mounted to a circuit card along with a processor such as a microprocessor or microcontroller. The circuit card is then mounted in the end product.
To appreciate the overhead required to program a non-volatile memory device, it is helpful to consider the prior-art flash memory device 12 shown in FIG. 1. Flash memory device 12 has twenty four address inputs A23-0, sixteen data inputs D15-0, output enable OE#, write enable WE#, chip enable CE#, program voltage input Vpp, supply voltage input Vcc and reference voltage input GND. Flash memory device 12 also includes a flash memory array 9, device state machine 4, command register 7, data register 5, address register 6 and status register 3.
To store a data value in flash memory device 12, two or more successive write operations must typically be performed. In the first write operation, a program command is written to command register 7 indicating that a data value is to be stored in the flash memory array 9. In the second write operation, an address value and a data value are written to address register 6 and data register 5, respectively. The device state machine 4 then stores the data value from data register 5 in the flash memory array 9 at the address indicated by the address value in address register 6.
A device programmer must assert signals at the flash memory device's address, data and control inputs in a particular sequence in order to cause the flash memory device 12 to carry out the above-described write operations. Specifically, to write the program command to command register 7 as described above, the device programmer must assert sixteen distinct signals representing the program command at data inputs D15-0, and also assert chip enable CE# and write enable WE#. The program command then latched within command register 7 within a specified time, after which the chip enable signal CE# or the write enable signal WE# must be deasserted in preparation for writing the data and address value in the second of the two write operations. To write the data value and address value into data register 5 and address register 6, respectively, the device programmer must assert twenty four distinct signals representing the address value at address inputs A23-0, sixteen distinct signals representing the data value at data inputs D15-0 chip enable CE# and write enable WE#. Of course, the number of signals that must be asserted by the device programmer increases with the number of data and address pins of the flash memory device 12.
There are a number of disadvantages to the above-described technique for programming a non-volatile memory device. First, device programmers themselves are usually implemented by a programmed processor and consequently require a relatively long time to generate the address, data and control signals necessary to program each data value. For example, while modern flash memory devices are capable of storing a new data value every 6 microseconds, device programmers typically require 40 to 190 microseconds to complete the sequence of signal transitions necessary to program a byte or word. In other words, the bottleneck in device programming is the signal setup time required by the device programmer, not the flash memory device itself. Also, while there are machines capable of generating data, address and control signals at the maximum rate permitted by the memory device, such machines are typically used to simulate real-time testing environments and are too expensive to dedicate to device programming.
Another disadvantage of the above-described programming technique is that the large number of connections required between the memory device and the device programmer usually make it impractical to erase and re-program the device after it has been soldered to a circuit card. This significantly limits the ability to modify or upgrade a boot program after the programmed memory device has been installed in-circuit. Because device programmers are often too expensive to be provided to field personnel, even socketed, potentially removable memory devices are usually not field upgradable.